#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author:余振新
@file: mysql.py
@time: 2023/04/07
"""
from typing import Text

import pymysql
from pymysql import cursors

from common.log import INFO, ERROR
from common.read_ini import ReadIni

"""
定义对MySql数据库的基本操作的封装
1.包含基本的单条语句操作,如删除,修改,更新
2.独立的查询单条,多条数据
3.独立的添加多条数据
"""


class MySqlDB:

    def __init__(self):
        INFO.logger.info("初始化数据库连接")
        """
        定义初始化数据库连接
        :param host_db: 数据库服务主机
        :param user_db: 数据库用户名
        :param passwd_db: 数据库密码
        :param name_db: 数据库名称
        :param port_db: 端口号,整形数据
        db=ReadConfig().get_value("name_db"),

        """
        mysql = ReadIni("/config/config.ini")
        self.host = mysql.read_ini("mysql", "host")
        self.user = mysql.read_ini("mysql", "user")
        self.passwd = mysql.read_ini("mysql", "passwd")
        self.port = int(mysql.read_ini("mysql", "port"))
        try:
            # 创建数据库连接,返回字典格式
            self.conn = pymysql.connect(
                host=self.host,
                user=self.user,
                passwd=self.passwd,
                port=self.port,
                charset="utf8"
            )
            # 使用 cursor 方法获取操作游标,得到一个可以执行sql语句,并且操作结果为字典返回的游标
            self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
            INFO.logger.info("数据库连接成功")

        except pymysql.Error as e:
            ERROR.logger.error("数据库连接失败,失败原因-> %s", e)

    def __del__(self):
        try:
            # 关闭游标
            self.cur.close()
            # 关闭连接
            self.conn.close()
        except AttributeError as error:
            ERROR.logger.error("数据库连接失败,失败原因-> %s", error)

    def query(self, sql, state="all"):
        """
            查询
            :param sql:
            :param state:  all 是默认查询全部
            :return:
            """
        try:
            self.cur.execute(sql)
            INFO.logger.info("查询语句-> %s", sql)
            if state == "all":
                # 查询全部
                data = self.cur.fetchall()
                INFO.logger.info("查询结果-> %s", data)
            else:
                # 查询单条
                data = self.cur.fetchone()
                INFO.logger.info("查询结果-> %s", data)
            return data
        except AttributeError as error_data:
            ERROR.logger.error("数据库连接失败,失败原因-> %s", error_data)
            raise

    def execute(self, sql: Text):
        """
            更新 、 删除、 新增
            :param sql:
            :return:
            """
        try:
            # 使用 execute 操作 sql
            rows = self.cur.execute(sql)
            INFO.logger.info("执行的语句-> %s", sql)
            # 提交事务
            self.conn.commit()
            INFO.logger.info("执行成功,影响行数-> %s", rows)
            return rows
        except AttributeError as error:
            ERROR.logger.error("数据库连接失败,失败原因-> %s", error)
            # 如果事务异常,则回滚数据
            self.conn.rollback()
            raise


if __name__ == "__main__":
    # test = MySqlDB()  # 实例化类
    # a = test.query(sql="SELECT employeename FROM cxjk_xspt.t_hr_employee")
    # print(a)
    # print(a[0]["employeename"])
    mysql = MySqlDB()
    meeting_no = mysql.query(state="one", sql="select meeting_no from cxjk_xspt.mt_meeting where aim ='UI自动化测试数据' ORDER BY meeting_no DESC")
    print(meeting_no["meeting_no"])
    mysql.execute("delete from cxjk_xspt.mt_user where meeting_no ='MEET10011625'")
